<?php
/**
 * CSVを作ります.
 * プロジェクト毎に作り変えるか拡張するかしてください.
 * @date 2008/08/27
 * @author nagai
 * @version $Id: csv_write.php 29 2009-11-26 08:23:19Z tzr250rsp $
 */
class csv_write {

  /**
   * 囲みます.
   * @param array $array
   * @param string $enclosure Default '"'
   */
  public static function enclosure(array $array , $enclosure='"'){
    foreach($array as &$val){
      $val = str_replace('"', '""', $val);
      $val = '"'.$val.'"';
    }
    return $array;
  }

  /**
   * CSVファイルに追加書き込みをします。追記モード.
   * @param string $filePath
   * @param array $data
   * @return bool
   */
  public static function writeFileToCSVModeA($filePath,$data){
    return self::writeFileToCSV(@fopen( $filePath, "a" ),$data);
  }

  /**
   * CSVファイルを作ります。上書きモード.
   * @nファイルサイズをゼロにします.
   * @param string $filePath
   * @param array $data
   * @return bool
   */
  public static function writeFileToCSVModeW($filePath,$data){
    //上書き書き込みモード
    return self::writeFileToCSV(@fopen( $filePath, "w" ),$data);
  }

  /**
   * CSVファイルを作ります.
   *
   * @param string $filePath
   * @param array $data
   * @return bool
   */
  public static function writeFileToCSV($fp,$data){
    if (!$fp){
      return false;
    }
    //排他ロック
    $bool = flock($fp, LOCK_EX);/**LOCK_EX => 排他ロック*/
    if (false === $bool){
      return false;
    }

    //データを回して、書く
    foreach ($data as $contents) {
      unset($contents['ZEND_DB_ROWNUM']);/**行番号を取り除く*/
      //1行づつ
      fwrite($fp, implode(',',csv_write::enclosure($contents) ));
      //終りに改行
      fwrite($fp, PHP_EOL);
    }
    //クローズ.
    return fclose( $fp );
  }

}
//end of class
?>